package com.bsj.sipgateway.web.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bsj.power.common.config.global.JsonResult;
import com.bsj.power.common.def.DeviceAddDTO;
import com.bsj.power.common.def.dto.Device2DDTO;
import com.bsj.power.common.def.dto.alarmReport.SceneFaultDTO;
import com.bsj.power.common.def.entity.gb28181.Device;
import com.bsj.power.common.def.dto.DeviceLightDTO;
import com.bsj.power.common.def.vo.Device2DInfoVO;
import com.bsj.power.common.def.vo.DeviceLightVO;
import com.bsj.power.common.def.vo.TwoDDeviceInfoVO;

import java.util.List;

/**
 * @Description
 * @Author zhaoyang
 * @Date 2024/6/20 9:48
 */
public interface IDeviceService {

    Long findIdByDeviceId(String deviceId);


    void updateDeviceOnline(boolean flag, Long id);

    /**
     * @param deviceId
     * @return: boolean
     * @decription 检查设备编号是否已经存在
     * @author zhaoyang
     * @date 2024/4/26 10:02
     */
    boolean deviceIdisExist(String deviceId);

    /**
     * 检查设备名称是否重复
     *
     * @param nickName
     * @return
     */
    boolean nickNameIsExist(String nickName);

    /**
     * @param dto
     * @return: int
     * @decription 添加设备
     * @author zhaoyang
     * @date 2024/5/9 9:39
     */
    int addDevice(DeviceAddDTO dto);

    /**
     * @param device
     * @return: void
     * @decription 页面表单更新设备信息
     * @author zhaoyang
     * @date 2024/5/9 11:27
     */
    void updateDevice(Device device);


    /**
     * @param deviceIds
     * @return: java.util.List<com.bsj.power.common.def.entity.gb28181.VideoDevice>
     * @decription 根据ids批量查询设备信息
     * @author zhaoyang
     * @date 2024/5/13 15:37
     */
    List<Device> selectDevicesByIds(List<Long> deviceIds);

    boolean delete(Integer did);

    /**
     * 根据国标设备数据库id查找设备
     *
     * @param did
     * @return
     */
    Device selectById(Long did);


    /**
     * @param page
     * @param size
     * @return: com.baomidou.mybatisplus.core.metadata.IPage<com.bsj.power.common.def.entity.gb28181.VideoDevice>
     * @decription
     * @author zhaoyang
     * @date 2024/5/9 10:23
     */
    IPage<Device> queryPageVideoDeviceList(Integer page, Integer size, String condition, String roomNo);

    /**
     * 根据国标设备号查询设备
     *
     * @param deviceId
     * @return
     */
    Device selectByDeviceId(String deviceId);

    /**
     * 根据单个场景id查询设备信息
     *
     * @param sceneId
     * @return
     */
    List<Device> selectBySceneId(Integer sceneId);

    /**
     * 根据多个场景id查询设备信息
     *
     * @param sceneIds
     * @return
     */
    List<Device> selectBySceneIds(List<Integer> sceneIds);

    /**
     * 根据设备编号和设备名称模糊搜索设备信息
     *
     * @param condition
     * @return
     */
    List<Device> findDeviceByCondition(String condition);

    /**
     * 根据设备编号查询对应的场景id
     *
     * @param deviceIds
     * @return
     */
    List<SceneFaultDTO> selectSceneFaultDTOByDeviceIds(List<String> deviceIds);

    /**
     * 查询所有视频设备的数量
     *
     * @return
     */
    Long findAllDeviceCount();

    List<Device> findAll();

    Device checkExist(String fieldName, Object fieldValue);


    /**
     * 根据设备id修改设备的分辨率
     * @param resolution
     * @param deviceId
     */
    void updateResolutionByDeviceId(Integer resolution, String deviceId);

    List<Device> selectByDeviceIds(List<String> deviceIds);

    JsonResult deviceStatusStatistics();

    /**
     * 修改设备的分辨率亮度对比度饱和度
     * @param deviceLightDTO
     * @return
     */
    boolean updateDeviceLight(DeviceLightDTO deviceLightDTO);

    /**
     * 查询设备的亮度等参数
     * @param deviceId
     * @return
     */
    DeviceLightVO getDeviceLightVO(String deviceId);

    /**
     * 批量修改设备二维地图信息
     *
     * @param device2DDTOS
     * @return
     */
    JsonResult updateDevice2dInfo(List<Device2DDTO> device2DDTOS);

    /**
     * 根据栋数和楼层查询设备二维信息
     *
     * @param building
     * @param floor
     * @return
     */
    JsonResult<TwoDDeviceInfoVO> listDevice2DInfo(Integer building, Integer floor);

    /**
     * 删除设备二维位置数据
     *
     * @param longs
     * @return
     */
    JsonResult deleteDevice2dInfo(List<Long> longs);

    /**
     * 根据机组号查询对应的视频设备
     *
     * @param i
     * @return
     */
    List<Device> selectDevicesByBuilding(int i);

    Integer selectResolutionByDeviceId(String deviceId);

    void updateIpAndPortByDeviceId(Device device);


    /**
     * 添加预添加设备信息
     *
     * @param deviceId 国标设备id
     * @return
     */
    JsonResult addPrepareDevice(String deviceId);

    /**
     * 删除预添加设备信息
     *
     * @param id 数据库id
     * @return
     */
    JsonResult deletePrepareDevice(Integer id);

    /**
     * 分页查询预添加设备信息
     *
     * @param pageNumber 页码
     * @param pageSize 条数
     * @param condition 设备编号模糊搜索
     * @return
     */
    JsonResult listPrepareDevice(Integer pageNumber, Integer pageSize, String condition);

}
